package com.dkd.day20250618;

import com.dkd.day20250614.ListNode;

public class SolutionoddEvenList {
    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        head.next = new ListNode(3);
        head.next.next = new ListNode(4);
        head.next.next.next = new ListNode(5);
        head.next.next.next.next = new ListNode(6);
        head.next.next.next.next.next = new ListNode(7);

        ListNode head2 = oddEvenList(head);

        while (head2 != null) {
            System.out.println(head2.val);
            head2 = head2.next;
        }
    }

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @return ListNode类
     */
    public static ListNode oddEvenList (ListNode head) {
        // write code here
        //伪码。额外建立一个链表，按顺序遍历，偶存奇不存，最后链接
        if (head == null || head.next == null) {
            return head;
        }

        // 初始化奇偶指针
        ListNode odd = head;          // 奇数节点指针
        ListNode even = head.next;    // 偶数节点指针
        ListNode evenHead = even;     // 保存偶数链表的头节点

        // 遍历链表，分离奇偶节点
        while (even != null && even.next != null) {
            odd.next = even.next;     // 奇数节点指向下一个奇数节点
            odd = odd.next;           // 移动奇数指针
            even.next = odd.next;     // 偶数节点指向下一个偶数节点
            even = even.next;         // 移动偶数指针
        }

        // 将奇数链表的尾节点连接偶数链表的头节点
        odd.next = evenHead;

        return head;
    }
    }
